package edu.cebanc.spring.biblioteca.domain;

import java.sql.Timestamp;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="tbl_libros")
public class Book {

    private int id_libro;
    private String isbn;
    private Timestamp fecha;
    private Set<Author> autores = new HashSet<Author>();
    private Set<Genre> generos = new HashSet<Genre>();
    private Set<BookCopy> ejemplares = new HashSet<BookCopy>();
    
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public int getId_libro() {
            return id_libro;
    }
    public void setId_libro(int id_libro) {
            this.id_libro = id_libro;
    }
    @Column(name="isbn")
    public String getIsbn() {
            return isbn;
    }
    public void setIsbn(String isbn) {
            this.isbn = isbn;
    }
    @Column(name="fecha")
    public Timestamp getFecha() {
            return fecha;
    }
    public void setFecha(Timestamp fecha) {
            this.fecha = fecha;
    }

    @ManyToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name="tbl_libros_tbl_autores",
    			joinColumns={@JoinColumn(name="id_libro")},
    			inverseJoinColumns={@JoinColumn(name="id_autor")})
    public Set<Author> getAutores() {
            return autores;
    }
    public void setAutores(Set<Author> autores) {
            this.autores = autores;
    }
    @ManyToMany(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name="tbl_libros_tbl_generos",
    			joinColumns={@JoinColumn(name="id_libro")},
    			inverseJoinColumns={@JoinColumn(name="id_genero")})
    public Set<Genre> getGeneros() {
            return generos;
    }
    public void setGeneros(Set<Genre> generos) {
            this.generos = generos;
    }
    @OneToMany(cascade=CascadeType.ALL)
    @JoinTable(name="tbl_libros_tbl_ejemplares", 
                            joinColumns = { @JoinColumn(name="id_libro")}, 
                            inverseJoinColumns = { @JoinColumn(name="id_ejemplar")})
    public Set<BookCopy> getEjemplares() {
            return ejemplares;
    }
    public void setEjemplares(Set<BookCopy> ejemplares) {
            this.ejemplares = ejemplares;
    }
}
